// 简化TableView操作的类


var CustomTableViewCell = cc.TableViewCell.extend({
    draw:function (ctx) {
        this._super(ctx);
    }
});

var TableViewH = cc.Layer.extend({

    // 方向 大小 cell大小 cell数量 cell类 点击回调
    direction : cc.SCROLLVIEW_DIRECTION_VERTICAL,
    tableViewSize : null,
    cellSize : null,
    numberOfCells : 0,

    cellClass : null,
    touchedCallback : null,
    tableView : null,

    init:function () {
        if (!this._super()) {
            return false;
        }

        var tableView = cc.TableView.create(this, this.tableViewSize);
        tableView.setDirection(this.direction);     // cc.SCROLLVIEW_DIRECTION_HORIZONTAL cc.SCROLLVIEW_DIRECTION_VERTICAL
        tableView.setDelegate(this);
        this.addChild(tableView);
        tableView.reloadData();
        this.tableView = tableView;

        // 设置优先级到-1024, 解决和CCMenu的冲突,
        tableView.setTouchPriority(-1024);

        return true;
    },

    release:function () {
        this.tableView.release();
        this.removeAllChildren();
        this._super();
    },
    /*
    onEnter : function() {
        cc.log("TableViewH.onEnter");
        this.setTouchEnabled(true);
    },

    onExit : function() {
        cc.log("TableViewH.onExit");
        this.setTouchEnabled(false);
    },
    */
    // 设置触摸优先级
    setTouchPriority : function(pri) {
        this.tableView.setTouchPriority(pri);
    },

    // 设置触摸是否有效
    setTouchEnabled : function(enable) {
        this.tableView.setTouchEnabled(enable);
    },

    // 内容偏移动画
    moveContentInDuration:function(posOffset, delay) {
        var curPos = this.tableView.getContentOffset();
        var newPos = {x:curPos.x + posOffset.x, y:curPos.y + posOffset.y };
        // 检测是否出界
        newPos.x = Math.max( Math.min(0, newPos.x), -(this.cellSize.width * this.numberOfCells - this.tableViewSize.width) );
        newPos.y = Math.max( Math.min(0, newPos.y), -(this.cellSize.height * this.numberOfCells - this.tableViewSize.height) );
        this.tableView.setContentOffsetInDuration(newPos, delay);
    },

    scrollViewDidScroll:function (view) {
    },
    scrollViewDidZoom:function (view) {
    },

    tableCellTouched:function (table, cell) {
        if (this.touchedCallback) this.touchedCallback(cell.getIdx());
    },

    cellSizeForTable:function (table) {
        return this.cellSize;
    },

    tableCellAtIndex:function (table, idx) {
        var strValue = idx.toFixed(0);
        var cell = table.dequeueCell();

        if (!cell) {
            cell = new CustomTableViewCell();
            // 创建自定义cellClass
            c = new this.cellClass();
            if (c && c.init()) {
                c.setIndexOfCells(idx);
                cell.addChild(c);
            }
        
        } else {
            // 重复使用cell
            c = cell.getChildren()[0];
            if (c) {
                c.setIndexOfCells(idx);
            }
        }
        
        return cell;
    },

    numberOfCellsInTableView:function (table) {
        return this.numberOfCells;
    },

    reloadData:function(numberOfCells) {
        if (numberOfCells >= 0) {
            this.numberOfCells = numberOfCells;
        };

        this.tableView.reloadData();
    },

});


// 方向 大小 cell大小 cell数量 cell类 点击回调
// direction : 方向 cc.SCROLLVIEW_DIRECTION_HORIZONTAL cc.SCROLLVIEW_DIRECTION_VERTICAL
// tableViewSize : TableView大小
// cellSize : cell大小
// numberOfCells : cell数量
// cellClass : 用于创建cell的类, 会调用setIndexOfCells函数, 参数为cell的index
// touchedCallback : 用于点击回调, 参数为cell的index

TableViewH.create = function (direction, tableViewSize, cellSize, numberOfCells, cellClass, touchedCallback) {
    var retObj = new TableViewH();
    retObj.direction = direction;
    retObj.tableViewSize = tableViewSize;
    retObj.cellSize = cellSize;
    retObj.numberOfCells = numberOfCells;
    retObj.cellClass = cellClass;
    retObj.touchedCallback = touchedCallback;

    if (retObj && retObj.init()) {
        return retObj;
    }
    return null;
};

// cellClass示例:
var myCellClass = cc.Node.extend({
    setIndexOfCells:function(index) {
        this.removeAllChildren();
        // 创建对象...
    },
});
